<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class cliente extends CI_Controller {
    private $sessao = "";

    function __construct(){
        parent::__construct();
        $this->load->model("ClienteModel");
        $this->load->model("UsuarioModel");
        $this->load->model("Selects");
        $this->load->model("Log");
        $this->load->helper("auth");
        $this->sessao = a_logado();
       
    }

    public function index($mensagem = ""){
        $clientes = $this->ClienteModel->listar();
        $this->load->helper("html");

        if( $clientes != false ) {
            $usuario = array('src'=>"images/tabelas/usuario.png", 'height' => '26px', "style" => "border:0;");
            $pedido = array('src'=>"images/tabelas/pedido.png", 'height' => '26px', "style" => "border:0;");
            $intencao = array('src'=>"images/tabelas/intencao.png", 'height' => '26px', "style" => "border:0;");
            $interesse = array('src'=>"images/tabelas/favorito.png", "style" => "border:0;");
            $visualizacao = array('src'=>"images/tabelas/visualizacao.png", "style" => "border:0;");
            $lista = "";
            $linha = 0;
            foreach( $clientes->result() as $cliente ) {
                if ($linha == 0)
                    $lista .= "<tr class=\"impar\">\n\t\t";
                else
                    $lista .= "<tr>\n\t\t";
                $lista .= "<td><input type=\"checkbox\" name=\"cliente_$cliente->idCliente\" /></td>\n\t\t";
                $lista .= "<td>". anchor("admin/cliente/editar/".$cliente->idCliente, $cliente->nome." ".$cliente->sobrenome)."</td>\n\t\t";
                $lista .= "<td><center>". anchor("admin/usuario/index/".$cliente->idCliente, img($usuario))."</center></td>\n\t\t";
                $lista .= "<td><center>". anchor("admin/vizualizacao/cliente/".$cliente->idCliente, img($visualizacao))."</center></td>\n\t\t";
                $lista .= "<td><center>". anchor("admin/interesse/cliente/".$cliente->idCliente, img($interesse))."</center></td>\n\t\t";
                $lista .= "<td><center>". anchor("admin/intencao/cliente/".$cliente->idCliente, img($intencao))."</center></td>\n\t\t";
                $lista .= "<td><center>". anchor("admin/pedido/cliente/".$cliente->idCliente, img($pedido))."</center></td>\n\t\t";
                $lista .= "<td>". anchor("admin/log/cliente/".$cliente->idCliente, "L")."</center></td>\n\t\t";
                if($cliente->autorizado == true)
                    $lista .= "<td>Sim</td>\n";
                else
                    $lista .= "<td>Não</td>\n";

                $lista .= "</tr>\n\t";

                if ($linha == 0 ) $linha = 1;
                else $linha = 0;
            }
        }
        else {
            $lista = "<tr>\n\t";
            $lista .= "<td colspan=\"4\">Nenhum cliente cadastrado.</td><td><td><td><td><td>\n";
            $lista .= "</tr>\n";
        }

        if($mensagem == "sucesso") $mensagem = "\nOperação realizada com Sucesso!\n";
        else $mensagem = "";
        $dados = array(
            "titulo" => "Gerenciamento de Clientes",
            "user" => $this->sessao->nome,
            "lista" => $lista,
            "mensagem" => $mensagem
            );

        $main = array(
            "dados" => $dados,
            "link" => "admin/listar_cliente_view"
            );

        $this->load->view("template", $main);
    }


    public function perfil($idCliente = "", $mensagem = "")
    {
        if($idCliente == "") show_404 ();

        $cliente = $this->ClienteModel->getCliente($idCliente);

        if($cliente == false) show_error ("Este Cliente n&altide;o existe");

        $this->load->helper("form");
        $this->load->library("form_validation");

        $res = $this->db->get("estados");

        if( $res->num_rows() > 0 ) :
            $estados = "";
            foreach($res->result() as $estado) :
                if( $estado->abrev_uf == $cliente->estado ):
                    $estados .= "<option value=\"$estado->abrev_uf\" selected=\"selected\"" .
                    set_select("estados", $estado->abrev_uf). ">$estado->nm_uf</option>\n";
                else :
                    $estados .= "<option value=\"$estado->abrev_uf\" ".
                    set_select("estados",$estado->abrev_uf).">$estado->nm_uf</option>\n";
                endif;
            endforeach;
        endif;

        $linha = 0;
        if( $cliente != false) :
                if ($linha == 0)
                    $lista .= "<tr class=\"impar\">\n\t\t";
                else
                    $lista .= "<tr>\n\t\t";
                $lista .= "<td><input type=\"checkbox\" name=\"cliente_$cliente->idCliente\" /></td>\n\t\t";
                //$lista .= "<td>". anchor("admin/cliente/editar/".$cliente->idCliente, "X")."</td>\n\t\t";
                $lista .= "<td>". anchor("admin/usuario/index/".$cliente->idCliente, "U")."</td>\n\t\t";
                $lista .= "<td>". anchor("admin/vizualizacao/cliente/".$cliente->idCliente, "V")."</td>\n\t\t";
                $lista .= "<td>". anchor("admin/interesse/cliente/".$cliente->idCliente, "F")."</td>\n\t\t";
                $lista .= "<td>". anchor("admin/intencao/cliente/".$cliente->idCliente, "I")."</td>\n\t\t";
                $lista .= "<td>". anchor("admin/pedido/cliente/".$cliente->idCliente, "P")."</td>\n\t\t";
                $lista .= "<td>". anchor("admin/log/cliente/".$cliente->idCliente, "L")."</td>\n\t\t";
                if($cliente->autorizado == true)
                    $lista .= "<td>Sim</td>\n";
                else
                    $lista .= "<td>Não</td>\n";

                $lista .= "</tr>\n\t";
                
                if ($linha == 0 ) $linha = 1;
                else $linha = 0;
        else :
            $lista = "<tr>\n\t";
            $lista .= "<td colspan=\"4\">Nenhum cliente cadastrado.</td>\n";
            $lista .= "</tr>\n";
        endif;
        $edit = array(
            "cliente" => $cliente,
            "estados" => $estados
        );

        if($mensagem != "") $mensagem = "\nOperação realizada com Sucesso!\n";
        $dados = array(
            "titulo" => "Perfil do Cliente $cliente->nome ",
            "user" => $this->sessao->nome,
            "lista" => $lista,
            "mensagem" => $mensagem,
            "edit" => $edit
            );

        $main = array(
            "dados" => $dados,
            "link" => "admin/perfil_cliente_view"
            );

        $this->load->view("template", $main);

    }

    public function cadastrar(){
        //$teste = $this->ClienteModel->getCliente('6');
        //echo $teste->dataCadastro;
        //echo strtotime('now');
        $this->load->helper("form");
        $this->load->library("form_validation");

        $res = $this->db->get("estados");

        if( $res->num_rows() > 0 ) :
            $estados = "";
            foreach($res->result() as $estado) :
                $estados .= "<option value=\"$estado->abrev_uf\" ". set_select("estado", $estado->abrev_uf). ">$estado->nm_uf</option>\n";
            endforeach;
        endif;

        $dados = array(
            "titulo" => "Cadastro de Clientes",
            "user" => $this->sessao->nome,
            "estados" => $estados,
            "erro" => ""
            );

        $main = array(
            "dados" => $dados,
            "link" => "admin/cad_cliente_view"
            );

        //Validação dos campos
        $this->form_validation->set_rules('nome', 'Nome', 'required|min_length[4]');
        $this->form_validation->set_rules('sobrenome', 'Sobrenome', 'required|min_length[4]');
        $this->form_validation->set_rules('tipoPessoa', 'tipoPessoa', 'required');
        $this->form_validation->set_rules('email', 'E-mail', 'required|valid_email|callback_email_check');
        $this->form_validation->set_rules('website', 'Website');
        $this->form_validation->set_rules('telefone', 'Telefone', 'required|numeric');
        $this->form_validation->set_rules('pais', 'Pa&iacute;s', 'required');
        $this->form_validation->set_rules('cidade', 'Cidade', 'required');
        $this->form_validation->set_rules('estado', 'Estado', 'required');
        $this->form_validation->set_rules('senha', 'Senha', 'required|md5');
        $this->form_validation->set_rules('senha2', 'Confirmar senha', 'required|matches[senha]');
        $this->form_validation->set_rules('fax', 'Fax', 'numeric');
        $this->form_validation->set_rules('celular', 'Celular', 'numeric');
        $this->form_validation->set_rules('endereco', 'Endereco', 'required');
        $this->form_validation->set_rules('numero', 'Numero', 'required');
        $this->form_validation->set_rules('complemento', 'Complemento');
        $this->form_validation->set_rules('cep', 'CEP', 'required|min_lenght[8]');

        if($this->input->post("tipoPessoa") == "juridica"){
            $this->form_validation->set_rules('razaoSocial', 'Razão Social', 'required');
            $this->form_validation->set_rules('cnpj', 'CNPJ', 'required|callback_cnpj_check|callback_cnpj_validacao');
        }
        else
            $this->form_validation->set_rules('cnpj', 'CPF', 'required|callback_cnpj_check|callback_cpf_validacao');

        if ($this->form_validation->run() == false)
            $this->load->view('template', $main);



        if ($this->form_validation->run() == false) :
            $this->load->view('template', $main);

        else :
            $campos = array(
                "nome" => $this->input->post("nome"),
                "sobrenome" => $this->input->post("sobrenome"),
                "tipoPessoa" => $this->input->post("tipoPessoa"),
                "razaoSocial" => $this->input->post("razaosocial"),
                "cnpj" => $this->input->post("cnpj"),
                "email" => $this->input->post("email"),
                "website" => $this->input->post("website"),
                "telefone" => $this->input->post("telefone"),
                "pais" => $this->input->post("pais"),
                "cidade" => $this->input->post("cidade"),
                "estado" => $this->input->post("estado"),
                "fax" => $this->input->post("fax"),
                "celular" => $this->input->post("celular"),
                "senha" => $this->input->post("senha"),
                "endereco" => $this->input->post("endereco"),
                "numero" => $this->input->post("numero"),
                "cep" => $this->input->post("cep"),
                "complemento" => $this->input->post("complemento"),
                "dataCadastro" => timestamp()
            );
            if ($this->input->post("razaosocial"))
                $campos['razaoSocial'] = $this->input->post("razaosocial");
            $idInserido = $this->ClienteModel->inserir($campos);

            $cliente = $this->ClienteModel->getCliente($idInserido);
            $usuario = array(
                "idCliente" => $cliente->idCliente,
                "email" => $campos['email'],
                "nome" => $campos['nome'],
                "sobrenome" => $campos['sobrenome'],
                "senha" => $campos['senha'],
                "ativo" => true,
                "dataCadastro" => strtotime("now")
            );
            $this->UsuarioModel->inserir($usuario);

            $this->Log->inserir(tipo_usuario(), id_tipo_usuario(), "cadastrou", "cliente", $idInserido);
            redirect("admin/cliente/index/sucesso");
        //edirect("admin/cliente");
        endif;
    }

    public function editar($id = ""){

        if ($id == "") redirect("erro/index/");
        $this->load->helper("form");
        $this->load->library("form_validation");

        $cliente = $this->ClienteModel->getCliente($id);
        if ($cliente == false) show_404 ();

        $res = $this->db->get("estados");

        if( $res->num_rows() > 0 ) :
            $estados = "";
            foreach($res->result() as $estado) :
                if( $estado->abrev_uf == $cliente->estado ):
                    $estados .= "<option value=\"$estado->abrev_uf\" selected=\"selected\"" .
                    set_select("estados", $estado->abrev_uf). ">$estado->nm_uf</option>\n";
                else :
                    $estados .= "<option value=\"$estado->abrev_uf\" ".
                    set_select("estados",$estado->abrev_uf).">$estado->nm_uf</option>\n";
                endif;
            endforeach;
        endif;

        $dados = array(
            "titulo" => "Edi&ccedil;&atilde;o de Clientes",
            "user" => $this->sessao->nome,
            "cliente" => $cliente,
            "estados" => $estados
            );
        $main = array(
            "dados" => $dados,
            "link" => "admin/edit_cliente_view"
            );


        $this->form_validation->set_rules('nome', 'Nome', 'required|min_length[4]');
        $this->form_validation->set_rules('sobrenome', 'Sobrenome', 'required|min_length[4]');
        $this->form_validation->set_rules('email', 'E-mail', 'required|valid_email');
        $this->form_validation->set_rules('website', 'Website');
        $this->form_validation->set_rules('telefone', 'Telefone', 'required|numeric');
        $this->form_validation->set_rules('pais', 'Pa&iacute;s', 'required');
        $this->form_validation->set_rules('cidade', 'Cidade', 'required');
        $this->form_validation->set_rules('estado', 'Estado', 'required');
        $this->form_validation->set_rules('senha', 'Senha', 'md5');
        $this->form_validation->set_rules('senha2', 'Confirmar senha', 'matches[senha]');
        $this->form_validation->set_rules('fax', 'Fax', 'numeric');
        $this->form_validation->set_rules('celular', 'Celular', 'numeric');
        $this->form_validation->set_rules('endereco', 'Endereco', 'required');
        $this->form_validation->set_rules('numero', 'Numero', 'required');
        $this->form_validation->set_rules('complemento', 'Complemento');
        $this->form_validation->set_rules('cep', 'CEP', 'required|min_lenght[8]');

        if($this->input->post("tipoPessoa") == "juridica"){
            $this->form_validation->set_rules('razaoSocial', 'Razão Social', 'required');
            $this->form_validation->set_rules('cnpj', 'CNPJ', 'required|callback_cnpj_check|callback_cnpj_validacao');
        }
        else
            $this->form_validation->set_rules('cnpj', 'CPF', 'required|callback_cnpj_check|callback_cpf_validacao');

        if ($this->form_validation->run() == false) :
            $this->load->view('template', $main);

        else :
            $campos = array(
                "nome" => $this->input->post("nome"),
                "sobrenome" => $this->input->post("sobrenome"),
                "tipoPessoa" => $this->input->post("tipoPessoa"),
                "razaoSocial" => $this->input->post("razaosocial"),
                "cnpj" => $this->input->post("cnpj"),
                "email" => $this->input->post("email"),
                "website" => $this->input->post("website"),
                "telefone" => $this->input->post("telefone"),
                "pais" => $this->input->post("pais"),
                "cidade" => $this->input->post("cidade"),
                "estado" => $this->input->post("estado"),
                "fax" => $this->input->post("fax"),
                "celular" => $this->input->post("celular"),
                "endereco" => $this->input->post("endereco"),
                "numero" => $this->input->post("numero"),
                "cep" => $this->input->post("cep"),
                "complemento" => $this->input->post("complemento")
            );

            if($this->input->post("senha") != "") $campos['senha'] = $this->input->post("senha");

            $this->ClienteModel->update($id, $campos);

            $usuario = array(
                "email" => $campos['email'],
                "nome" => $campos['nome'],
                "sobrenome" => $campos['sobrenome'],
                "senha" => $campos['senha'],
                "ativo" => true
            );

            $this->UsuarioModel->updateEmail($cliente->email, $usuario);

            $this->Log->inserir(tipo_usuario(), id_tipo_usuario(),"editou", "cliente", $id);
            redirect("admin/cliente/index/sucesso");

        endif;
    }

    public function gerenciar(){
        //print_r($this->input->post());
        if($this->input->post("deletar_x")) :
                $this->delete();
        elseif($this->input->post("autorizar_x")) :
                $this->autorizar();
        elseif($this->input->post("desautorizar_x")) :
                $this->desautorizar();
        endif;
    }

    private function delete(){
        foreach($this->input->post() as $campo => $valor) :
            $nome = explode("_", $campo);
            //Se a primeira parte do nome do campo é cliente
            if($nome[0] == "cliente") :
                $this->ClienteModel->delete( $nome[1] );
                $this->Log->inserir(tipo_usuario(), id_tipo_usuario(),"deletou", "cliente", $nome[1]);
                $nome = "";
            endif;
        endforeach;
        
        redirect("admin/cliente/index/sucesso");
    }

    private function autorizar(){
        //print_r($this->input->post());
        foreach($this->input->post() as $campo => $valor) :
            $nome = explode("_", $campo);
            //Se a primeira parte do nome do campo é produto
            if($nome[0] == "cliente") :
                $vetor = array( "autorizado" => 1);
                $this->ClienteModel->update($nome[1],$vetor );
                $this->Log->inserir(tipo_usuario(), id_tipo_usuario(), "autorizou", "cliente", $nome[1]);
                $nome = "";
            endif;
        endforeach;
        
        redirect("admin/cliente/index/sucesso");
    }

    private function desautorizar(){
        //print_r($this->input->post());
        foreach($this->input->post() as $campo => $valor) :
            $nome = explode("_", $campo);
            //Se a primeira parte do nome do campo é produto
            if($nome[0] == "cliente") :
                $vetor = array( "autorizado" => 0);
                $this->ClienteModel->update($nome[1],$vetor );
                $this->Log->inserir(tipo_usuario(), id_tipo_usuario(), "desautorizou", "cliente", $nome[1]);
                $nome = "";
            endif;
        endforeach;
        redirect("admin/cliente/index/sucesso");
    }


    function email_check($str){
        if ($this->Selects->getClienteOrUsuarioEmail($str)) :
            $this->form_validation->set_message('email_check', 'Já há um cadastro com este e-mail.');
            return FALSE;

        else :
            return TRUE;

        endif;
    }
    
    function cnpj_check($str){
        $cliente = $this->ClienteModel->getClienteCnpj($str);
        if ($cliente != false) {
            if($cliente->cnpj == $str)
                return TRUE;
            else{
                $this->form_validation->set_message('cnpj_check', 'Já há um cadastro com este CNPJ ou CPF.');
                return FALSE;
            }
        }
        else 
            return TRUE;
    }

    function cnpj_validacao($cnpj){
        $this->form_validation->set_message('cnpj_validacao', 'Digite um CNPJ Valido.');
        if (strlen($cnpj) <> 18) return FALSE;
        $soma1 = ($cnpj[0] * 5) +

        ($cnpj[1] * 4) +
        ($cnpj[3] * 3) +
        ($cnpj[4] * 2) +
        ($cnpj[5] * 9) +
        ($cnpj[7] * 8) +
        ($cnpj[8] * 7) +
        ($cnpj[9] * 6) +
        ($cnpj[11] * 5) +
        ($cnpj[12] * 4) +
        ($cnpj[13] * 3) +
        ($cnpj[14] * 2);
        $resto = $soma1 % 11;
        $digito1 = $resto < 2 ? 0 : 11 - $resto;
        $soma2 = ($cnpj[0] * 6) +

        ($cnpj[1] * 5) +
        ($cnpj[3] * 4) +
        ($cnpj[4] * 3) +
        ($cnpj[5] * 2) +
        ($cnpj[7] * 9) +
        ($cnpj[8] * 8) +
        ($cnpj[9] * 7) +
        ($cnpj[11] * 6) +
        ($cnpj[12] * 5) +
        ($cnpj[13] * 4) +
        ($cnpj[14] * 3) +
        ($cnpj[16] * 2);
        $resto = $soma2 % 11;
        $digito2 = $resto < 2 ? 0 : 11 - $resto;
        if (($cnpj[16] == $digito1) && ($cnpj[17] == $digito2))
            return TRUE;
        else{
            return FALSE;
        }
    }

    function cpf_validacao($cpf) {
        $cpf = str_replace(".", "", $cpf);
        $cpf = str_replace("-", "", $cpf);
    // verifica se e numerico
        $this->form_validation->set_message('cpf_validacao', 'Digite um CPF Valido.');
        if(!is_numeric($cpf)) {
            return false;
        }

        // verifica se esta usando a repeticao de um numero
        if( ($cpf == '11111111111') || ($cpf == '22222222222') || ($cpf == '33333333333') || ($cpf == '44444444444') || ($cpf == '55555555555') || ($cpf == '66666666666') || ($cpf == '77777777777') || ($cpf == '88888888888') || ($cpf == '99999999999') || ($cpf == '00000000000') ) {
        return false;
        }

        //PEGA O DIGITO VERIFIACADOR
        $dv_informado = substr($cpf, 9,2);

        for($i=0; $i<=8; $i++) {
            $digito[$i] = substr($cpf, $i,1);
        }

        //CALCULA O VALOR DO 10º DIGITO DE VERIFICAÇÂO
        $posicao = 10;
        $soma = 0;

        for($i=0; $i<=8; $i++) {
            $soma = $soma + $digito[$i] * $posicao;
            $posicao = $posicao - 1;
        }

        $digito[9] = $soma % 11;

        if($digito[9] < 2) {
            $digito[9] = 0;
        } else {
            $digito[9] = 11 - $digito[9];
        }

        //CALCULA O VALOR DO 11º DIGITO DE VERIFICAÇÃO
        $posicao = 11;
        $soma = 0;

        for ($i=0; $i<=9; $i++) {
            $soma = $soma + $digito[$i] * $posicao;
            $posicao = $posicao - 1;
        }

        $digito[10] = $soma % 11;

        if ($digito[10] < 2) {
            $digito[10] = 0;
        }
        else {
            $digito[10] = 11 - $digito[10];
        }

        //VERIFICA SE O DV CALCULADO É IGUAL AO INFORMADO
        $dv = $digito[9] * 10 + $digito[10];
        if ($dv != $dv_informado) {
            return false;
        }

            return true;
    }

}